# !/usr/bin/env python
# !-*-coding:utf-8 -*-
# !@TIME: 
# !@Author : Destroy丶寒露
# !@File :.py

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

class JD:

    def __init__(self, driver):
        self.driver = driver

    def start(self, visitweb):
        #self.driver.get('https://www.jd.com/')
        input_tag = self.driver.find_element_by_id('key')
        key = 'K40'
        input_tag.send_keys(key)
        input_tag.send_keys(Keys.ENTER)
        time.sleep(2)
        self.get_goods(visitweb)
        pass

    def get_goods(self, visitweb):
        # 二。定位商品，抓取数据
        # 1.分析网页当前口罩的分页列表，所有口罩的商品都展现在<li>标签中，这些不同分类的口罩商品的<li>标签的属性class="gl-item"都是一样的，所以我们去定位商品，选class属性去定位
        goods = self.driver.find_elements_by_class_name('gl-item')  # 查找多个节点，返回是个列表
        # for循环取出商品：名字，价格，评论，商品的链接
        for good in goods:
            # 获取商品的链接：链接在<a>标签的href属性只不过
            good_link = good.find_element_by_tag_name('a').get_attribute('href')
            # 获取商品名字：在<div class ='p-name'>下的<a>标签下的<em>标签中，但是会发现当前的商品名字分三段展示，所以运用replace函数用空白代替换行
            good_name = good.find_element_by_css_selector('.p-name em').text.replace('\n', '')
            # 获取价格：同上可得
            good_price = good.find_element_by_css_selector('.p-price i').text
            # 获取评论
            good_commit = good.find_element_by_css_selector('.p-commit a').text

            good_info_list = {'1_No': '', '2_name': '', '3_link': '', '4_price': '', '5_comment': ''}
            info = [visitweb.data_num, good_name[:50], good_link, good_price, good_commit]
            visitweb.data_num += 1
            good_info_list = dict(zip(good_info_list.keys(), info))
            visitweb.info_list.append(good_info_list)
        try:
            self.next_page(visitweb)  # 翻页
        except Exception as e:
            print('已到末页！')

    def next_page(self, visitweb):
        button = visitweb.find_element_by_partial_link_text("下一页")
        button.click()
        time.sleep(1)
        self.start(visitweb)


